package chapter13.wrapper.String;

/**
 * @Auther: Tx
 * @Date: 2022/5/9 17:19
 */
public class String10 {
    String str = new String("hsp");
    final char[] ch = {'j','a','v','a'};
    public void change(String str,char ch[]){
        str = "java";
        System.out.println(str);
        ch[0]='h';
    }

    public static void main(String[] args) {
        String10 s10 = new String10();
        s10.change(s10.str,s10.ch);
        System.out.println(s10.str+"and");
        System.out.println(s10.ch);
    }
}
//1.首先创建String10对象，并用s10指向它.
//2.由于str时new出来的，故String对象存在在堆中，但是value属性指向hsp
//3.ch时数组，引用类型，存放在堆中。


//4.当调用方法时就会新开一个方法栈，简称为change栈，
//5. 刚开始change栈中str指向堆中的String对象。
//6.由于直接将str赋值为"java"，故str指向了常量池的java。
//7.修改ch[0]为 h 在堆中

//方法调用完毕，返回主函数栈
//输出str + "and"，由于主栈中str还是指向堆中的。故依旧是hsp。
//输出hspand
//由于change栈中修改了ch指向空间的数据。而现在主栈中ch依旧指向那个空间，故ch为
//hava